// ------------------------------------------------------------------------
// 版权信息
// 版权归重庆虫儿飞科技有限公司所有。
// 所有权利保留。
// 官方网站：https://netokit.com
// 许可证信息
// Neto.Kit 项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。
// 许可证的完整文本可以在源代码树根目录中的 LICENSE-APACHE 和 LICENSE-MIT 文件中找到。
// 
// 使用条款
// 使用本代码应遵守相关法律法规和许可证的要求。
// 
// 免责声明
// 对于因使用本代码而产生的任何直接、间接、偶然、特殊或后果性损害，我们不承担任何责任。
// 
// 其他重要信息
// Neto.Kit 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。
// 有关 Neto.Kit 项目的其他详细信息，请参阅位于源代码树根目录中的 COPYRIGHT 和 DISCLAIMER 文件。
// 
// 更多信息
// 请访问 https://netokit.com 获取更多关于 Neto.Kit 项目的许可证和版权信息。
// ------------------------------------------------------------------------

namespace Neto.CodeGeneration;

/// <summary>
///     代码生成配置
/// </summary>
[SuppressSniffer]
public class CgConfig
{
    /// <summary>
    ///     项目名称
    /// </summary>
    [Description("项目名称")]
    public string ProjectName { get; set; } = "Neto";

    /// <summary>
    ///     数据库-连接字符串（为空表示，使用本项目数据库配置文件的第一个数据库去连接）
    /// </summary>
    [Description("数据库-连接字符串（为空表示，使用本项目数据库配置文件的第一个数据库去连接）")]
    public string DbConn { get; set; } = "";

    /// <summary>
    ///     数据库类型（sqlsugar）
    /// </summary>
    [Description("数据库类型（sqlsugar）")]
    public DbType DbType { get; set; }

    /// <summary>
    ///     保存目录
    ///     例如：Api
    ///     例如：Attributes
    ///     例如：api\test
    /// </summary>
    [Description("保存目录")]
    public string SaveDirectory { get; set; } = "API";

    #region DB

    // /// <summary>
    // ///     DB-表前缀替换
    // /// </summary>
    // [Description("DB-表前缀替换")]
    // public string DbTablePrefixReplace { get; set; } = "Sys";

    /// <summary>
    ///     DB-表名字符串替换，多个用英文逗号隔开
    ///     例如：Sys_=Sys,Sys=Sys
    /// </summary>
    [Description("DB-表名字符串替换")]
    public string DbTableReplace { get; set; } = "Sys_=Sys,Sys=Sys";

    /// <summary>
    ///     DB-表名去前缀，多个前缀用英文逗号隔开
    ///     例如：Sys_,Sys,直接把已制定名称开头的前缀去掉
    /// </summary>
    [Description("DB-表名去前缀")]
    public string DbTableNoPrefix { get; set; } = "Sys_,Sys";

    #endregion DB

    #region Entity
    
    /// <summary>
    ///     实体使用EF特性
    /// </summary>
    [Description("实体使用EF特性")]
    public bool EntityUseEfAttribute { get; set; }

    /// <summary>
    ///     实体使用SqlSugar特性
    /// </summary>
    [Description("实体使用SqlSugar特性")]
    public bool EntityUseSqlSugarAttribute { get; set; }

    /// <summary>
    ///     实体-替换，例如：Sys_=Ht,Abc_=Ht或者Sys_=Ht,Abc_=Ht
    ///     例如：Sys_=Ht,Sys=Ht或者Sys_=Ht,Sys=Ht
    /// </summary>
    [Description("实体-替换，例如：Sys=Ht,Abc_=Ht或者Sys_=Ht,Abc_=Ht")]
    public string EntityReplace { get; set; } = "Sys_=,Sys=";


    /// <summary>
    ///     实体-前缀
    ///     例如：在表User前面加上前缀Ht 变成 HtUser
    /// </summary>
    [Description("实体-前缀")]
    public string EntityPrefix { get; set; } = "Ht";

   

    #endregion

    #region API

    /// <summary>
    ///     API 区域
    /// </summary>
    [Description("API 区域")]
    public string ApiArea { get; set; } = "Api";

    /// <summary>
    ///     Api前缀
    ///     例如：服务，Dto，input，out的前缀，用于区分多个Area防止重复
    ///     默认：使用的是 ApiArea的值
    /// </summary>
    [Description("Api控制器-前缀")]
    public string ApiPrefix { get; set; } = "Api";

    /// <summary>
    ///     API应用层-命名空间
    ///     不用此命名空间，默认命名按：项目名称.Application.Api前缀
    /// </summary>
    [Description("应用层-命名空间")]
    public string ApiNameSpace { get; set; } = "Neto.Application.Api";

    // /// <summary>
    // ///     API-Dto替换，例如：Sys_=Ht,Abc_=Ht或者Sys_=Ht,Abc_=Ht
    // ///     ///
    // /// </summary>
    // [Description("API-Dto替换，例如：Sys=Ht,Abc_=Ht或者Sys_=Ht,Abc_=Ht")]
    // public string ApiDtoReplace { get; set; } = "Sys_=,Sys=";

    #endregion API
    
    
    #region MVC

    /// <summary>
    ///     MVC控制器-命名空间
    ///     默认规则：项目名称.Web.Entry.Areas.Mvc区域.Controllers
    ///     默认命名空间：Neto.Web.Entry.Areas.HtAdmin.Controllers
    /// </summary>
    [Description("MVC控制器-命名空间")]
    public string MvcControllerNameSpace { get; set; } = "Neto.Web.Entry.Areas.HtAdmin.Controllers";

    /// <summary>
    ///     MVC控制器-继承的基础类库
    ///     MVC控制器继承的基础 Controller
    /// </summary>
    [Description("MVC控制器-继承的基础类库")]
    public string MvcControllerBase { get; set; } = "HtAdminBaseController";

    /// <summary>
    ///     MVC-区域
    /// </summary>
    [Description("MVC-区域")]
    public string MvcArea { get; set; } = "HtAdmin";

    // /// <summary>
    // ///     MVC-Dto替换，等号前是被替换名称，等号后是替换的新内容
    // /// </summary>
    // [Description("MVC-Dto替换，等号前是被替换名称，等号后是替换的新内容")]
    // public string MvcDtoReplace { get; set; } = "Sys_,Sys=";

    /// <summary>
    ///     MVC-前缀
    /// </summary>
    [Description("MVC-前缀")]
    public string MvcPrefix { get; set; } = "Ht";
    
    /// <summary>
    ///     Mvc应用层-命名空间
    ///     默认规则：项目名称.Application.Mvc区域
    /// </summary>
    [Description("Mvc应用层-命名空间")]
    public string MvcApplicationNameSpace { get; set; } = "Neto.Application.HtAdmin";

    #endregion MVC

   
}